/**
 * 
 */
package com.pe.pgn.clubpgn.webapp.controller.producto;

import java.util.List;

import javax.servlet.http.HttpServletRequest;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.ModelMap;
import org.springframework.validation.BindingResult;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.support.SessionStatus;

import com.pe.pgn.clubpgn.common.CLPConstantes;
import com.pe.pgn.clubpgn.domain.ClpbProducto;
import com.pe.pgn.clubpgn.domain.ClpdUnidadMedida;
import com.pe.pgn.clubpgn.service.ProductoService;
import com.pe.pgn.clubpgn.webapp.controller.BaseFormController;

/**
 * @author Edwin Farfan
 */
@Controller
@RequestMapping("/producto/**")
public class ProductoController extends BaseFormController{

	@Autowired
	private ProductoService service;
	
	@RequestMapping(value = "/productoList.html")
    public void listarProductos(ModelMap model) {

		List<ClpbProducto> listadoProductos= service.obtenerProductos();
		model.addAttribute("productos", listadoProductos);
    }
	
	@RequestMapping(value = "/productoForm.html", method = RequestMethod.GET)
	public @ModelAttribute("producto") ClpbProducto verProducto
	(@RequestParam(value = "id", required = false) Long id,ModelMap modelMap){
		
		List<ClpdUnidadMedida> listaUnidadMedida= service.listadoUnidadMedida();
		modelMap.addAttribute("listaUnidadMedida",listaUnidadMedida);
		if(id!=null){
			ClpbProducto producto= service.obtenerProducto(id);
			
			producto.setUnidadMedida(producto.getCoUnidadMedida().getDeUnidadMedida());
			return producto;
		}
		return new ClpbProducto();
	}

	@RequestMapping(value = "/productoForm.html", method = RequestMethod.POST)
	public String guardarProducto(@ModelAttribute("producto") ClpbProducto producto,
			BindingResult result, SessionStatus status, HttpServletRequest request) {
		try {
			if (result.hasErrors()) {
				return "/producto/productoForm";
			}
			service.guardarProducto(producto);
			saveMessage(request, getText("productoForm.added", producto.getDeProducto().length() > CLPConstantes.LIMITE_CADENA ?
					producto.getDeProducto().substring(0, CLPConstantes.LIMITE_CADENA)
					.concat(CLPConstantes.PUNTOS_SUSPENSIVOS) : producto.getDeProducto(), 
					request.getLocale()));
			return "redirect:productoList.html";
			
		} catch (Exception e) {
			System.out.println("Exception invisible "+e.getMessage());
			saveError(request, getText("errors.general", request.getLocale()));
			return "/producto/productoForm";
		}
	}	
	
	@RequestMapping(value = "/eliminarProducto.html")
	public String eliminarProducto(@RequestParam(value = "id", required = true) Long id, 
			HttpServletRequest request) {

	   	if (id == null){
        	throw new IllegalArgumentException("el Id del Producto es requerido ");
        }
		try {
			service.eliminarProducto(id);
			saveMessage(request, getText("productoForm.deleted", request.getLocale()));
			return "redirect:productoList.html";
		} catch (Exception e) {
			saveError(request, getText("errors.general", request.getLocale()));
			return "/producto/productoForm";
		}
	}		

}
